查看原文
其他

iOS 性能优化:用 Xcode Organizer 诊断性能问题

脱脂棉布团 老司机技术 2022-08-26

作者:脱脂棉布团,iOS 开发者,目前在从事社交产品开发。


Sessions: https://developer.apple.com/videos/play/wwdc2020/10076/

本 session 介绍了新版 Xcode Organizer 的功能,只需要点击几下鼠标,即可分析从多版本 APP 中获取的耗电量及性能数据,供开发者轻松对比不同版本的APP 数据指标。探索磁盘写入诊断工具及滚动卡顿度量工具,并学习如何通过这些工具为用户提供更好的 APP 性能、降低耗电量以及减少设备负担。

Xcode Organizer 概览

顾名思义,Xcode Organizer 内置于 Xcode,只需要点击菜单栏 Window -> Organizer 就可以开启运行。

当 app 运行时,系统会在被允许的设备上收集电池和性能相关数据,并发送到苹果服务器进行汇总,然后通过 Organizer 呈现给开发者。

全新的 UI 设计

Xcode 12 中的 Organizer 进行了全新的 UI 设计,新的交互界面使得开发者能够很轻松地比较不同版本 app 之间的性能表现。各个版本的 app 数据以柱状图排列展示,只需单击某一列,右侧面板就会刷新显示最新版本和所选版本的相关数据。去年,苹果设置了一个使用量的最低门槛,只有当 app 的某个版本的使用量达到这个门槛,该版本的柱状图才会显示在 Organzier 中。而在 Xcode 12, 该门槛降低了 1/5,这就能让更多的开发者可以使用 Organizer 来监测 app 性能。

误差幅度

上图 x 轴 1.0.1 版本左边有一个图标,这说明当前版本的用户量比较少,可能会导致统计数据误差幅度较大。

在该版本的右侧详情面板,会有额外的信息显示该版本的误差幅度是 15%。而随着该版本的使用量增加,误差幅度会逐步降低。当用户量达到一定规模,误差幅度足够低的时候,这些信息会从面板中移除。

新功能

今年 Organizer 提供了两个新的性能指标  Scroll hitchesDisk write diagnostics


Scroll Hitch

苹果提供了一个名为 Meal Planner 的 app 来直观地展示什么是 Scroll hitch

在下方第一张 gif 中,界面滚动时有明显的卡顿,第二张 gif 中则十分流畅。Scroll hitch 指的就是滑动界面时,已渲染的图像帧没有在预期的时间点从当前屏幕上移除。它通常会导致下一帧图像延迟出现或者被丢弃从而表现出卡顿和抖动。

<<< 左右滑动见更多 >>>

Hitch rate

将图像帧延迟显示在屏幕上的时间总和 Hitch time, 除以用户滑动屏幕的持续时间 Scroll duration,可以得到一个比例 Hitch rate, 它可以反映用户感受到的滑动卡顿的严重程度。

Hitch rate 可以被分为三档

  • <5 ms/s,滑动流畅

  • 5-10 ms/s, 每隔几秒会有图像帧被丢弃,轻微卡顿

  • > 10 ms/s,图像帧被频繁地丢弃,严重卡顿

这里可能大家会有疑问,不是可以用 fps 来检测滑动卡顿情况么,为什么还要有一个 Hitch rate。这是因为 fps 并不适用于所有的情况。比如当一个动画中有停顿时间,fps 就无法反应该动画的流畅程度,而且并不是所有的应用都以达到 60 fps/120 fps 为目标,比如有些游戏只想以 30 fps 运行。而对于 Hitch rate 而言,我们的目标永远是让它达到 0。

想了解更短关于 hitch 的内容,可以观看 WWDC20 The Eliminate Animation Hitches with XCTests[1] (强烈建议大家观看)

磁盘写入诊断报告 (Disk write diagnostics reports)

当一个 app 在 24 小时内写入磁盘的数据超过 1 GB,Organizer 就会生成磁盘写入诊断报告。优化磁盘写入带来的好处有

  • 更好的性能表现

  • 更长的电池使用寿命

  • 更好的设备运行状况

Disk Write diagnostics 的入口在 Organizer 的左侧面板 Reports 一栏下

Demo

还是以上文的 Meal Planner 作为示例

点击左侧面板 Metrics 下的 Disk Writes,显示了不同版本磁盘写入情况的柱状图,可以发现最新的 2.2 版本磁盘写入有明显上升。点击 reports 一栏下的 Disk Writes 可以显示导致该现象的堆栈信息,同时每条信息下方也标注了该方法导致的磁盘写入量的占比。

顶部所选中的方法是 2.2 版本中增加的新功能,用户可以添加自定义的食谱和图片。这里已经很明确地指出了问题所在,我们可以直接跳转到该方法内去进一步调查。在解决了一个问题后,你可以把该条信息标注为已处理。

右侧面板根据设备类型和操作系统进行数据的分类展示。下方的柱状图则显示了过去 14 天收到的磁盘写入诊断报告数量。

总结

Session 的最后苹果工程师给出了三条使用 Organizer 的建议:

  • 使用新版 Organizer 来比较不同版本 app 的性能指标

  • 使用 Hitch 指标来检测 app 界面滑动时的性能表现

  • 使用 disk writes reports 和  disk write metrics 来深入了解 app 的磁盘写入状况。

推荐阅读

✨ iOS 性能优化:使用 MetricKit 2.0 收集数据

✨ iOS 性能优化:优化 App 启动速度

✨ iOS 性能优化:用电池和性能 API 识别性能趋势

✨ iOS 稳定性:App 被终止的原因

关注我们

我们是「老司机技术周报」,每周会发布一份关于 iOS 的周报,也会定期分享一些和 iOS 相关的技术。欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2020」,领取学习大礼包。

支持作者

这篇文章的内容来自于 《WWDC20 内参》。在这里给大家推荐一下这个专栏,专栏目前已经创作了 108 篇文章,只需要 29.9 元。点击【阅读原文】,就可以购买继续阅读 ~

WWDC 内参 系列是由老司机周报、知识小集合以及 SwiftGG 几个技术组织发起的。已经做了几年了,口碑一直不错。 主要是针对每年的 WWDC 的内容,做一次精选,并号召一群一线互联网的 iOS 开发者,结合自己的实际开发经验、苹果文档和视频内容做二次创作。

参考资料

[1]

WWDC20 The Eliminate Animation Hitches with XCTests: https://developer.apple.com/videos/play/wwdc2020/10077


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存